15.10 Meldungsfenster mit »MessageBox«  
Sicherlich sind Ihnen modale Dialoge wie der folgende geläufig:
 Hier klicken, um das Bild zu Vergrößern
Abbildung 15.18 Ein typisches modales Meldungsfenster
Im vorherigen Abschnitt haben Sie erkannt, dass auch die Implementierung eines sehr einfachen Dialogfensters relativ viel Code und Zeit beansprucht. Weil modale Dialogfenster ähnlich wie das in Abbildung 15.18 sehr häufig zur einfachen Interaktion mit dem Anwender oder auch nur zur Bereitstellung von Information in Applikationen eingesetzt werden, ist im Namespace System.Windows.Forms eine Klasse vordefiniert, mit der die meisten Anforderungen erfüllt werden können. Es handelt sich um die Klasse MessageBox.
Der abgebildete Dialog beruht auf der folgenden Anweisung:
| MessageBox.Show("Wollen Sie die Anwendung beenden?", _
|
| "Anwendungsmeldung", _
|
| MessageBoxButtons.YesNo, _
|
| MessageBoxIcon.Question, _
|
| MessageBoxDefaultButton.Button2)
|
Fast braucht man keine erklärenden Worte zu verlieren, denn der Code beschreibt sich nahezu von selbst: Im ersten Argument wird der Meldungstext übergeben, im zweiten die Beschriftung der Titelleiste, im dritten die anzuzeigenden Schaltflächen, das vierte Argument beschreibt das Symbol im Clientbereich des Meldungsfensters und das fünfte und letzte Argument gibt vor, welche Schaltfläche nach dem Start der Anzeige fokussiert werden soll.
Der Programmcode, den man benötigt, um ein Meldungsfenster anzuzeigen, ist bedeutend kürzer und einfacher als der eines benutzerdefinierten Dialogs. Dennoch sind modalen Dialogen, die auf der Klasse MessageBox basieren, Grenzen gesetzt, denn der Anwender wird nur mit Hinweisen und Informationen versorgt, auf die er durch das Anklicken einer Schaltfläche reagiert, um damit den weiteren Programmablauf zu beeinflussen.
15.10.1 Die Methode »MessageBox.Show«  
MessageBox verfügt nur über eine typspezifische Methode: Es ist die vielfach überladene statische Methode Show, die mit 20 Überladungen aufwartet. Die einfachste ist die, die nur die Zeichenfolge des Meldungstextes entgegennimmt:
| MessageBox.Show("Visual Basic macht Spaß")
|
Nachfolgend sehen Sie die Ausgabe dieser Anweisung.
 Hier klicken, um das Bild zu Vergrößern
Abbildung 15.19 Das denkbar einfachste Meldungsfenster
Klickt der Anwender auf den OK-Button, wird das Meldungsfenster geschlossen.
Optisch wirkt eine leere Titelleiste stümperhaft, deshalb werden Sie bestimmt in allen Fällen dieser auch eine Zeichenfolge übergeben wollen. Üblicherweise verwendet man dazu den Namen der Anwendung, den man auch aus der statischen Eigenschaft ProductName der Klasse Application beziehen kann:
| MessageBox.Show("Visual Basic macht Spaß", Application.ProductName)
|
In einem dritten Argument können Sie die im Meldungsfenster angezeigten Schaltflächen festlegen. Dazu übergeben Sie eine der Enumeration MessageBoxButtons vordefinierten Konstanten.
Tabelle 15.14 Konstanten der Enumeration »MessageBoxButtons«
| Member
|
Beschreibung
|
| AbortRetryIgnore
|
Das Meldungsfeld enthält die Schaltflächen Beenden, Wiederholen und Ignorieren.
|
| OK
|
Das Meldungsfeld enthält die OK-Schaltfläche.
|
| OKCancel
|
Das Meldungsfeld enthält die Schaltflächen OK und Abbrechen.
|
| RetryCancel
|
Das Meldungsfeld enthält die Schaltflächen Wiederholen und Abbrechen.
|
| YesNo
|
Das Meldungsfeld enthält die Schaltflächen Ja und Nein.
|
| YesNoCancel
|
Das Meldungsfeld enthält die Schaltflächen Ja, Nein und Abbrechen.
|
Wollen Sie im linken Bereich des Meldungsfensters ein Symbol anzeigen lassen, haben Sie tatsächlich nur vier verschiedene Alternativen, obwohl in der Liste der MessageBoxIcon-Aufzählung neun aufgeführt sind.
Tabelle 15.15 Konstanten der Enumeration »MessageBoxIcon«
| Member
|
Beschreibung
|
| None
|
Das Meldungsfenster enthält kein Symbol.
|
| Hand, Stop, Error
|
Das Meldungsfeld enthält ein Symbol, das aus einem weißen X in einem Kreis mit rotem Hintergrund besteht.
|
| Question
|
Das Meldungsfeld enthält ein Symbol, das aus einem Fragezeichen in einem Kreis besteht.
|
| Exclamation, Warning
|
Das Meldungsfeld enthält ein Symbol, das aus einem Ausrufezeichen in einem Dreieck mit gelbem Hintergrund besteht.
|
| Asterisk, Information
|
Das Meldungsfeld enthält ein Symbol, das aus dem Kleinbuchstaben »i« in einem Kreis besteht.
|
Erzeugen Sie ein Meldungsfenster mit mehreren Schaltflächen, kommt der Wahl der vorfokussierten Schaltfläche eine besondere Bedeutung zu. Nehmen wir beispielsweise das folgende Meldungsfenster:
| MessageBox.Show("Wollen Sie die Anwendung beenden?", _
|
| Application.ProductName, _
|
| MessageBoxButtons.YesNo, _
|
| MessageBoxIcon.Question)
|
Standardmäßig ist die linke Schaltfläche (OK) fokussiert und reagiert nicht nur auf einen Mausklick, sondern auch auf die Eingabe- und Leertaste. Es wäre fatal, wenn in einem Formular viele Einträge gemacht worden sind, der Anwender versehentlich auf die Schließen-Schaltfläche der Form klickt und dann in seiner Hektik danach noch zu schnell auf die (Enter)-Taste drückt – seine Arbeit wäre verloren. Sie als Entwickler sollten diese Situation vermeiden. Dazu fokussieren Sie einfach die Schaltfläche im Meldungsfenster, die nicht das Schließen der Form oder gar der Anwendung zur Folge hat. Der der Festlegung des Icons folgende Parameter der Show-Methode vom Typ MessageBoxDefaultButton eröffnet Ihnen diese Option.
Tabelle 15.16 Konstanten der Enumeration »MessageBoxDefaultButton«
| Member
|
Beschreibung
|
| Button1
|
Die erste Schaltfläche im Meldungsfenster ist die vorfokussierte Schaltfläche.
|
| Button2
|
Die zweite Schaltfläche von links im Meldungsfenster ist die vorfokussierte Schaltfläche.
|
| Button3
|
Die rechte Schaltfläche im Meldungsfenster ist die vorfokussierte Schaltfläche.
|
Weitere optionale Parameter ermöglichen über die aufgeführten Fähigkeiten hinaus die Anzeige einer Hilfe-Schaltfläche und die Verknüpfung zu einer passenden Hilfedatei.
15.10.2 Der Rückgabewert der Meldungsfenster  
Zeigt das Meldungsfenster nur einen OK-Button, erübrigt sich selbstverständlich die Auswertung dieser Schaltfläche. Werden jedoch mehrere Schaltflächen angeboten müssen Sie auswerten, welche der Anwender angeklickt hat. Die Information, welche Schaltfläche des Meldungsfensters zum Schließen geführt hat, bezieht man über den Rückgabewert der Methode MessageBox.Show, der vom Typ DialogResult ist. Die Mitglieder dieser Enumeration sind schon in Tabelle 15.13 vorgestellt worden.
Im folgenden Ereignishandler einer Schaltfläche wird ein Meldungsfenster angezeigt, das den Anwender um Bestätigung nachsucht, ob er die Anwendung schließen möchte oder nicht. Der Code reagiert in Abhängigkeit von der im Meldungsfenster gewählten Schaltfläche.
| Private Sub btnSchliessen_Click(...)
|
| Dim strMeldung As String
|
| strMeldung = "Wollen Sie die Anwendung beenden?"
|
| Dim result As DialogResult = MessageBox.Show(strMeldung, _
|
| Application.ProductName, _
|
| MessageBoxButtons.OKCancel, _
|
| MessageBoxIcon.Question, _
|
| MessageBoxDefaultButton.Button2)
|
| If result = System.Windows.Forms.DialogResult.OK Then
|
| Application.Exit()
|
| Else
|
| ...
|
| End Sub
|
Die Abbrechen-Schaltfläche wird vorfokussiert, um ein versehentliches Schließen der Anwendung zu vermeiden. In einer If-Anweisung wird der Rückgabewert überprüft. Hat der Anwender OK gedrückt, wird die Anwendung unweigerlich geschlossen, ansonsten kann eine andere Reaktion erfolgen. In den meisten Fällen ist bei der Rückgabe DialogResult.Cancel kein Code erforderlich.
|